<!--

    Copyright (C) 2011 Domenico Briganti <dometec@gmail.com>

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

            http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

-->

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
        <title>Deploy Manager Help</title>
    </head>
    <body>
    	<h1>Giuda al Deploy Manager</h1>
    	<hr/>
    	<ol>
	    	<li><a href="#Introduzione">Introduzione</a></li>
	    	<li>
	    		<a href="#Installazione">Installazione</a>
	    		<ol>
	    			<li><a href="#variabili">Varialibi d'ambiente e file di configurazione</a></li>
	    			<li><a href="#users">Utenti</a>
	    			<li><a href="#database">Database</a>
	    		</ol>
	    	</li>
	    	<li>
	    		<a href="#static">Gestore parti statiche</a>
	    		<ol>
	    			<li><a href="staging">Gestione dello staging</a></li>
	    			<li>
	    				<a href="produzione">Gestione della produzione</a>
	    				<ol>
	    					<li><a href="#current-prod">Script current-prod</a></li>
	    					<li><a href="#compare-prod">Script compare-prod</a></li>
	    					<li><a href="#comparecontent-prod">Script comparecontent-prod</a></li>
	    					<li><a href="#revert-prod">Script revert-prod</a></li>
	    					<li><a href="#export-prod">Script export-prod</a></li>
	    				</ol>
	    			</li>
	    		</ol>
	    	</li>
	    	<li><a href="#tomcat">Gestore parti dinamiche</a></li>
    	</ol>
    	<hr/>
    	<h3 id="#Introduzione">Introduzione</h3>
    		Il progetto è diviso in due parti:
 			<ul>
 				<li><a href="#statix">Gestione Parti Statiche (per i grafici)</a></li>
 				<li><a href="">Gestione deploy sui cluster tomcat</a></li>
 			</ul>
		L'autenticazione all'installaziione viene fatta attraverso il file tomcat-users.xml, ma è possibile usare accound ldap o su database.<br/>
 		<br/>
    	<hr/>
    	<h3 id="Installazione">Installazione</h3>
    	<p>Il DeployManager altro non è che un'interfaccia per svn e maven, infatti tutti i comandi dati dal browser
  			possono essere eseguiti sulla shell. Il Deploy Manager esegue gli stessi comandi e le riporta al browser.
  			L'applicazione è stata sviluppata e testata con tomcat 6.0.20 e java 1.6.</p>
  		<p>L'installazione deve essere sullo stesso server in cui gira SVN (dato che vendono eseguiti script svn presenti 
			nelle cartelle hook di ogni repository SVN...)
			Attenzione a settare correttamente la working directory, perchè all'interno di essa vengono creati i file per 
			il database e la cartella logs....</p>
		<h4 id="variabili">Varialibi d'ambiente e file di configurazione:</h4>
		<p>Settare la variabile d'ambiente:</p>
		<p><i>SVNROOT=/SUBVERSION</i>   --> (Il Path radice in cui sotto ci sono tutti i repository SVN )</p>
		<p>Configurare correttamente i file "SVNPass" e "SVNUrl" sotto la cartella di configurazione del DeployManager
			(contenuta in %CurrentDirectory%/DeployManager/) e specificare per SVNPass, l'username e la password per l'accesso a SVN:</p>
		<p>		<i>utente=password</i>			</p>
		<p>E per il file SVNUrl, l'url del server svn con il protocollo:</p>
		<p>		<i>svn+ssh://localhost/</i>		</p>
		<h4 id="users">Utenti:</h4>
		<p>Modificare il server.xml del tomcat per inserire il realm degli utenti che hanno accesso all'applicazione, 
			ci sono solo due ruoli, l'utente normale e l'amministratore:</p>
		<p>Per ora è solo il file tomcat-users.xml che contiene:</p>
			&nbsp;  &lt;role rolemane="deployadmin"/&gt;<br/>
			&nbsp;  &lt;role rolemane="deployuser"/&gt;<br/>
			&nbsp;  &lt;user username="deployadmin" password="deployadmin" roles="deployadmin, deployuser" /&gt;<br/>
			&nbsp;  &lt;user username="deployuser" password="deployuser" roles="deployuser" /&gt;<br/>
    	<h4 id="#database">Database</h4>
    	<p>Installare il database mysql con lo schema presente nella cartella src, la configurazione prevere un database mysql installato in locale, porta 3306, con uno schema chiamato deploymanager, stessa password dello schema.</p>
    	<h4>Copia del war nella cartella webapp di tomcat</h4>
		<h4>Far partire il tomcat e controllare il log</h4>
		<h4>Settare dal browser le credenziali per cvs</h4>
    	<hr></hr>
    	<h3 id="static">Gestione Parti Statiche (per i grafici)</h3>	
  		<p>Eseguiamo questi passi per la gestione di un ipotetico sito, MioSitoDiProva.</p>
		<p>Prima di iniziare deve essere presente la struttura di default nel repository svn:</p>
		<br/>
		&nbsp;&nbsp;MioSitoDiProva<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|---ContenutoStatico<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|----trunk<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|----htdocs<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|----branches<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|----tags<br/>
		<br/>
		<p>Url del sito: svn://localhost/MioSitoDiProva</p>
			
		<h3 id="staging">Gestione dello staging</h3>
		<p>La sincronizzazione dell'ambiente di staging con la versione in trunk del sito avviene automaticamente 
			al commit su svn. Lo script $SVNROOT/MioSitoDiProva/hooks/post-commit si occupa di questo. 
			Montare la directory dell'htdocs di staging un in punto qualsiasi del server (Nel nostro esempuo 
			useremo /tmp/staging/htdocs)</p>
		<p>Effettuare il primo export con il comando:</p>
		<br/>
		&nbsp;<i>cd /tmp/staging/htdocs</i><br/>
		&nbsp;<i>svn co svn://localhost/MioSitoDiProva/ContenutoStatico/trunk/htdocs</i><br/>
		<p>Andate nella cartella $SVNROOT/MioSitoDiProva/hooks e create un file post-commit (senza estensione!)</p>
		&nbsp;<i>touch post-commit</i><br/>
			
		<p>renderlo eseguibile</p>
			
		&nbsp;<i>chmod +x post-commit</i><br/>
			
		<p>con questo contenuto:</p>
			
		&nbsp;<i>/usr/bin/sudo -u tomcat /usr/bin/svn update /tmp/staging/htdocs/</i><br/>
			
		<p>In questo caso abbiamo usato sudo, che bisogna configurare correttamente! L'utente con cui viene eseguito lo 
			script sopra è quello con cui gira svn (svruser o svn o csvn o root dipendentemente dal server) e siccome 
			usiamo l'utente tomcat per effettuare le operazioni con svn, dobbiamo continuare a usare l'utente tomcat con 
			sudo. Attenzione ad usare path assoluti dentro i file di hook in generale perchè vengono eseguiti in un 
			ambiente sterile senza che le variabili standard della shell siano caricate (come ad esempio $PATH...). Per 
			far si che attraverso sudo l'utente svn possa usare i comandi snv come tomcat senza, richiedere la password, 
			configurare il file /etc/sudoers con:</p>
			
		&nbsp;<i>Cmnd_Alias SVN = /home/csvn/csvn_1.4.4/bin/svn </i>   <br/>                                                                                                                                                                        
		&nbsp;<i>csvn    ALL = (tomcat) NOPASSWD: SVN 			 </i>	<br/>
			
		<p>Che praticamente dice che l'utente csvn può eseguire il comando SVN senza che gli venga richiesta la password.
			Attenzione quando si usa il protocollo svn+ssh!!! In questo caso l'utente con cui girerà lo script sopra è 
			effettivamente l'utente che fa il commit e quindi per ogni utente ci deve essere una riga simile all'ultima
			(<i>domenico.briganti   ALL = (tomcat) NOPASSWD: SVN</i>).</p>
		
		<h3 id="produzione">Gestione della produzione</h3>
		<p>La sincronizzazione della produzione con il contenuto di svn viene fatta attraverso il Deploy Manager. Adesso
			è necessario configurare una serie di script per poter gestire le varie operazioni dese disponibili dal web.
			Il punto centrale è che in produzione è possibile mettere soltato le versioni taggate della trunk, quindi prima
			di un'export in produzione bisogna fare un tag o dire quale tag si vuole utilizzare, se è già stato effettuato.
			Per prima cosa montiamo la cartella dell'htdocs di produzione nel file system (in questi esempi utilizzeremo 
			/tmp/produzione/htdocs). Per prima cosa è necessario creare un tag di partenza. Potremmo creare il tag
			release-0.0.1-start quindi avere il nostro svn come:</p>
				<br/>
		&nbsp;&nbsp;MioSitoDiProva<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|---ContenutoStatico<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|----trunk<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|----htdocs<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|----branches<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|----tags<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|----release-0.0.1-start<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br/>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|----htdocs<br/>
		<br/>
		<p>facciamo il primo export a mano in produzione. Ci portiamo dove abbiamo montato l'htdocs di produzione e quindi diamo il comando di export:</p>
		<i>cd /tmp/produzione/htdocs/</i><br/>
		<i>svn co svn://localhost/MioSitoDiProva/ContenutoStatico/tags/release-0.0.1-start/htdocs</i>
			
		<h4 id="current-prod">Script current-prod</h4>
		<p>Questo script restituisce nello standard output l'ultimo url reposityore portato in produzione. Il file deve 
		essere presente nella cartella hooks del progetto in SVN ed essere eseguibile:</p>
		<br/>
		<i>cd /var/svn/MioSitoDiProva/hooks/</i><br/>
		<i>nano -w current-prod</i><br/>
		<i>chmod +x current-prod</i><br/>
		<p>Il contenuto del file deve esere:</p>
		<i>#!/bin/sh</i><br/>
		<i>svn info /tmp/produzione/htdocs | grep URL</i>
		<p>che restituisce le informazione relative a svn della cartella di htdocs di produzione. Lo script deve appartenere
		all'utente svnuser (come tutti i file presenti nella directory hooks) ma viene eseguito dalla webapp con
		l'utente tomcat, quindi non è necessario il sudo e le variabili di sistema sono presenti, diversamente dallo
		script post-commit.</p>
		<h4 id="compare-prod">Script compare-prod</h4>
		<p>Questo script restituisce nello standard output le differenze che ha la produzione rispetto all'ultimo export 
			da svn, relativamente ai file:</p>
		<i>cd /var/svn/MioSitoDiProva/hooks/</i><br/>
		<i>nano -w compare-prod</i><br/>
		<i>chmod +x compare-prod</i><br/>
		<p>Il contenuto del file deve esere:</p>
		<i>#!/bin/sh</i><br/>
		<i>svn status /tmp/produzione/htdocs</i>
		<br/>
		<h4 id="comparecontent-prod">Script comparecontent-prod</h4>
		<p>Questo script restituisce nello standard output le differenze che ha la produzione rispetto all'ultimo export 
			da svn, relativamente ai contenuti dei file, creando cosi un file patch in formato UDF (Unified Diff Format):</p>
		<i>cd /var/svn/MioSitoDiProva/hooks/</i><br/>
		<i>nano -w comparecontent-prod</i><br/>
		<i>chmod +x comparecontent-prod</i><br/>
		<p>Il contenuto del file deve esere:</p>
		<i>#!/bin/sh</i><br/>
		<i>svn diff --no-diff-deleted /tmp/produzione/htdocs</i>			
		<h4 id="revert-prod">Script revert-prod</h4>	
		<p>Questo script risincronizza l'htdocs di produzione con l'svn. Ripristina i file modificati e quelli cancellati
			a mano sull'htdocs ma non effettua nessuna operazione sui file nuovi.</p>
		<i>cd /var/svn/MioSitoDiProva/hooks/</i><br/>
		<i>nano -w revert-prod</i><br/>
		<i>chmod +x revert-prod</i><br/>
		<p>Il contenuto del file deve esere:</p>
		<i>#!/bin/sh</i><br/>
		<i>svn revert -R /tmp/produzione/htdocs</i>			
		<h4 id="export-prod">Script export-prod</h4>	
		<p>Questo script riporta il contenuto statico del sito di un determinato tag in produzione.</p>
		<i>cd /var/svn/MioSitoDiProva/hooks/</i><br/>
		<i>nano -w export-prod</i><br/>
		<i>chmod +x export-prod</i><br/>
		<p>Il contenuto del file deve esere:</p>
		<i>#!/bin/sh</i><br/>
		<i>TAG="$1"</i>
		<i>svn switch svn://localhost/MioSitoDiProva/ContenutoStatico/tags/$TAG/htdocs /tmp/produzione/htdocs</i>
		<i>svn revert -R /tmp/produzione/htdocs</i>
		<p>Il primo comando cambia la copia di lavoro della directory di produzione sul determinato tag, il secondo
		si occupa di sostituire realmente i file.</p>
	
		<hr/>

		<h3 id="tomcat">Gestione deploy war sui cluster tomcat</h3>
    	
    </body>
</html>